package br.com.jdcanado.gae.inforse.model;

import java.util.ArrayList;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.jdo.PersistenceManager;
import javax.jdo.Query;

import br.com.jdcanado.gae.inforse.controller.PMF;

import com.google.appengine.api.datastore.Key;

public class ClienteDAO {
	//static PersistenceManager pm = PMF.get().getPersistenceManager();
	
	public static List<Cliente> queryClientesByUsuario(Usuario usuario){
		PersistenceManager pm = PMF.get().getPersistenceManager();
		List<Cliente> listaResultado = new ArrayList();
		Query query = pm.newQuery(Cliente.class);
		
		query.setFilter("usuario == usuarioCliente");
		
		query.declareParameters("String usuarioCliente");
				
		try{
			listaResultado = (List<Cliente>) query.execute(usuario.getOperador());
			return listaResultado;
		}catch(Exception e){
			FacesMessage fm = new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), "erroLogin");
			FacesContext.getCurrentInstance().addMessage(null, fm);
			return null;
		}finally{
			query.closeAll();
		}
	}
	
	public static void atualizarCliente(Cliente cliente) {
		PersistenceManager pm = PMF.get().getPersistenceManager();
		
		try{
			Cliente clienteAtualizado = pm.getObjectById(Cliente.class, cliente.getCodigo());
			Cliente detached = pm.detachCopy(clienteAtualizado);
			
			detached.setBairro(cliente.getBairro());
			detached.setCargo(cliente.getCargo());
			detached.setCelular(cliente.getCelular());
			detached.setCep(cliente.getCep());
			detached.setCidade(cliente.getCidade());
			detached.setCnpj(cliente.getCnpj());
			detached.setContato(cliente.getContato());
			detached.setEmail(cliente.getEmail());
			detached.setInscricaoEstadual(cliente.getInscricaoEstadual());
			detached.setLogradouro(cliente.getLogradouro());
			detached.setNumero(cliente.getNumero());
			detached.setRamoAtividade(cliente.getRamoAtividade());
			detached.setRazaoSocial(cliente.getRazaoSocial());
			detached.setTelefone(cliente.getTelefone());
			detached.setUf(cliente.getUf());
			detached.setUnidadeConsumidora(cliente.getUnidadeConsumidora());
						
			pm.makePersistent(detached);
			FacesMessage fm = new FacesMessage(FacesMessage.SEVERITY_INFO, "Cadastro atualizado!", "message");
			FacesContext.getCurrentInstance().addMessage(null, fm);
		}catch(Exception e){
			FacesMessage fm = new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), "erroLogin");
			FacesContext.getCurrentInstance().addMessage(null, fm);			
		}finally{
			pm.close();
		}
	}
	
	public static void deletarCliente(Cliente cliente) {
		PersistenceManager pm = PMF.get().getPersistenceManager();
		Cliente copia, detached = null;
		
		try{
			copia = pm.getObjectById(Cliente.class, cliente.getCodigo());
			detached = pm.detachCopy(copia);
			pm.deletePersistent(detached);
			FacesMessage fm = new FacesMessage(FacesMessage.SEVERITY_INFO, "Cliente excluído!", "message");
			FacesContext.getCurrentInstance().addMessage(null, fm);
		}catch(Exception e){
			FacesMessage fm = new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), "erroLogin");
			FacesContext.getCurrentInstance().addMessage(null, fm);			
		}finally{
			pm.close();
		}
	}
	
	public static void inserirCliente(Cliente cliente){
		PersistenceManager pm = PMF.get().getPersistenceManager();
		
		try{		
			pm.makePersistent(cliente);
			FacesMessage fm = new FacesMessage(FacesMessage.SEVERITY_INFO, "Cadastro realizado!", "message");
			FacesContext.getCurrentInstance().addMessage(null, fm);
		}catch(Exception e){
			FacesMessage fm = new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), "erroLogin");
			FacesContext.getCurrentInstance().addMessage(null, fm);
		}finally{
			pm.close();
		}
	}
}
